home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-28 | 23.0 KB | 1,638 lines |
-
- gotgun: dc.w 0
-
- ANIMPOINTER: dc.l 0
-
- ASKFORPROT:
- include "ab3:source_4000/askforprot.s"
-
- ALIENBRIGHT: dc.w 0
-
- ItsAnAlien:
-
- tst.b NASTY
- beq.s .NONASIES
-
- move.l #32*256,StepUpVal
- move.l #32*256,StepDownVal
-
- ; move.l #4,deadframe
- ; move.w #0,screamsound
- ; move.w #160,nasheight
-
- move.w 12(a0),GraphicRoom(a0)
- move.w 12(a0),d2
- bge.s .okalive
-
-
- rts
-
-
- .NONASIES:
- move.w #-1,12(a0)
- rts
-
- .okalive:
-
- move.l ZoneAdds,a5
- move.l (a5,d2.w*4),d0
- add.l LEVELDATA,d0
- move.l d0,objroom
-
- move.l d0,a6
- move.b ToEcho(a6),ALIENECHO
-
- moveq #0,d0
- move.l LINKFILE,a6
- move.l a6,a5
- move.b TypeOfThing(a0),d0
- add.l #AlienBrights,a5
- move.w (a5,d0.w*2),d1
- neg.w d1
- move.w d1,ALIENBRIGHT
- muls #A_AnimLen,d0
- add.l #AlienAnimData,a6
- add.l d0,a6
-
- move.l a6,ANIMPOINTER
-
- move.l LINKFILE,a1
- move.l a1,a2
- add.l #AlienShotOffsets,a2
-
- lea AlienStats(a1),a1
- moveq #0,d0
- move.b TypeOfThing(a0),d0
-
- move.l (a2,d0.w*8),d1
- asl.l #7,d1
- move.l d1,SHOTYOFF
- move.w 6(a2,d0.w*8),d1
- neg.w d1
- asl.w #2,d1
- move.w d1,SHOTOFFMULT
-
- muls #AlienStatLen,d0
- add.w d0,a1 ; ptr to alien stats
-
- move.w A_Height(a1),d0
- ext.l d0
- asl.l #7,d0
- move.l d0,thingheight
-
- move.w A_Auxilliary(a1),AUXOBJ
-
- move.w (a0),CollId
-
- move.b 1(a1),VECOBJ
- move.w A_ReactionTime(a1),REACTIONTIME
- move.w A_DefBeh(a1),DEFAULTMODE
- move.w A_ResBeh(a1),RESPONSEMODE
- move.w A_RetBeh(a1),RETREATMODE
- move.w A_FolBeh(a1),FOLLOWUPMODE
- move.w A_DefSpeed(a1),prowlspeed
- move.w A_ResSpeed(a1),responsespeed
- move.w A_RetSpeed(a1),retreatspeed
- move.w A_FolSpeed(a1),followupspeed
- move.w A_FolTimeout(a1),FOLLOWUPTIMER
- move.w A_WallCollDist(a1),d0
- move.b diststowall+1(pc,d0.w*4),awayfromwall
- move.w diststowall+2(pc,d0.w*4),extlen
-
- jsr AIROUTINE
-
- rts
-
- ALIENECHO: dc.w 0
-
- diststowall:
- dc.w 0,40
- dc.w 1,80
- dc.w 2,160
-
- ItsAnObject:
-
- move.l LINKFILE,a1
- lea ObjectStats(a1),a1
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #ObjectStatLen,d0
- add.w d0,a1 ; pointer to obj stats.
-
- move.l a1,StatPointer
-
- move.w (a1),d0
- cmp.w #1,d0
- blt Collectable
- beq Activatable
- cmp.w #3,d0
- blt Destructable
- beq Decoration
-
- rts
-
- GUNHELD:
-
- ; This is a player gun in his hand.
-
- move.l a1,a2
- jsr ACTANIMOBJ
-
- rts
-
- Collectable:
-
- move.w 12(a0),d0
- bge.s .okinroom
- rts
- .okinroom
-
- tst.b WhichAnim(a0)
- bne.s GUNHELD
-
- move.w d0,GraphicRoom(a0)
-
- tst.b NASTY
- beq.s .nolocks
- move.l DoorsHeld(a0),d1
- or.l d1,DoorLocks
- .nolocks:
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
- and.b #$80,worry(a0)
- move.l a1,a2
-
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
-
- tst.w O_FloorCeiling(a2)
- beq.s .onfloor
- move.l ToZoneRoof(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbotc
- move.l ToUpperRoof(a1),d0
- .okinbotc:
-
- bra.s .onceiling
-
- .onfloor
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- .onceiling
-
- asr.l #7,d0
- move.w d0,4(a0)
-
- bsr DEFANIMOBJ
-
- bsr CHECKNEARBYONE
- tst.b d0
- beq.s .NotCollected1
-
- bsr PLR1CollectObject
- move.w #-1,12(a0)
- clr.b worry(a0)
-
- .NotCollected1
-
- cmp.b #'n',mors
- beq.s .NotCollected2
- bsr CHECKNEARBYTWO
- tst.b d0
- beq.s .NotCollected2
-
- bsr PLR2CollectObject
- move.w #-1,12(a0)
- clr.b worry(a0)
-
- .NotCollected2
-
-
- rts
-
- Activatable:
-
- move.w 12(a0),d0
- bge.s .okinroom
- rts
- .okinroom
-
- tst.b WhichAnim(a0)
- bne ACTIVATED
-
- move.w d0,GraphicRoom(a0)
- tst.b NASTY
- beq.s .nolocks
- move.l DoorsHeld(a0),d1
- or.l d1,DoorLocks
- .nolocks
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
- and.b #$80,worry(a0)
- move.l a1,a2
-
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
-
- tst.w O_FloorCeiling(a2)
- beq.s .onfloor
- move.l ToZoneRoof(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbotc
- move.l ToUpperRoof(a1),d0
- .okinbotc:
-
- bra.s .onceiling
-
- .onfloor
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- .onceiling
-
- asr.l #7,d0
- move.w d0,4(a0)
-
- bsr DEFANIMOBJ
-
- bsr CHECKNEARBYONE
- tst.b d0
- beq.s .NotActivated1
-
- tst.b p1_spctap
- beq.s .NotActivated1
-
- ; The player has pressed the spacebar
- ; within range of the object.
-
- bsr PLR1CollectObject
-
-
- move.w #0,ObjTimer(a0)
- st WhichAnim(a0)
- move.w #0,SecTimer(a0)
- rts
-
- .NotActivated1:
-
-
- cmp.b #'n',mors
- beq .NotActivated2
- bsr CHECKNEARBYTWO
- tst.b d0
- beq.s .NotActivated2
-
- tst.b p2_spctap
- beq.s .NotActivated2
-
- ; The player has pressed the spacebar
- ; within range of the object.
- bsr PLR2CollectObject
-
-
- move.w #0,ObjTimer(a0)
- st WhichAnim(a0)
- move.w #0,SecTimer(a0)
- rts
-
- .NotActivated2:
-
- rts
-
- ACTIVATED:
-
- move.w d0,GraphicRoom(a0)
- ; move.l DoorsHeld(a0),d1
- ; or.l d1,DoorLocks
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
- and.b #$80,worry(a0)
- move.l a1,a2
-
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
-
- tst.w O_FloorCeiling(a2)
- beq.s .onfloor
- move.l ToZoneRoof(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbotc
- move.l ToUpperRoof(a1),d0
- .okinbotc:
-
- bra.s .onceiling
-
- .onfloor
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- .onceiling
-
- asr.l #7,d0
- move.w d0,4(a0)
-
- bsr ACTANIMOBJ
-
- move.w TempFrames,d0
- add.w d0,SecTimer(a0)
- move.w O_ActiveTimeout(a2),d0
- blt.s .nottimeout
-
- cmp.w SecTimer(a0),d0
- ble.s .DEACTIVATE
-
- .nottimeout:
-
- bsr CHECKNEARBYONE
- tst.b d0
- beq.s .NotDeactivated1
-
- tst.b p1_spctap
- beq.s .NotDeactivated1
-
- ; The player has pressed the spacebar
- ; within range of the object.
-
- .DEACTIVATE:
-
- move.w #0,ObjTimer(a0)
- clr.b WhichAnim(a0)
- rts
-
- .NotDeactivated1:
-
- cmp.b #'n',mors
- beq.s .NotDeactivated2
-
- bsr CHECKNEARBYTWO
- tst.b d0
- beq.s .NotDeactivated2
-
- tst.b p2_spctap
- beq.s .NotDeactivated2
-
- ; The player has pressed the spacebar
- ; within range of the object.
-
- move.w #0,ObjTimer(a0)
- clr.b WhichAnim(a0)
- rts
-
- .NotDeactivated2:
-
- rts
-
- Destructable:
-
- move.l LINKFILE,a3
- add.l #ObjectStats,a3
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #ObjectStatLen,d0
- add.l d0,a3
-
- moveq #0,d0
- move.b damagetaken(a0),d0
- cmp.w O_HitPoints(a3),d0
- blt StillHere
-
- tst.b numlives(a0)
- beq.s .alreadydead
-
- cmp.b #'n',mors
- bne.s .notext
-
- move.w TextToShow(a0),d0
- blt.s .notext
-
- muls #160,d0
- add.l LEVELDATA,d0
- jsr SENDMESSAGE
- ; move.w #0,SCROLLXPOS
- ; move.l d0,SCROLLPOINTER
- ; add.l #160,d0
- ; move.l d0,ENDSCROLL
- ; move.w #40,SCROLLTIMER
-
- .notext:
-
- move.w #0,ObjTimer(a0)
-
- .alreadydead
-
- move.b #0,numlives(a0)
-
- move.w 12(a0),d0
- bge.s .okinroom
- rts
- .okinroom
-
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
- move.l a1,a2
-
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
-
- tst.w O_FloorCeiling(a2)
- beq.s .onfloor
- move.l ToZoneRoof(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbotc
- move.l ToUpperRoof(a1),d0
- .okinbotc:
-
- bra.s .onceiling
-
- .onfloor
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- .onceiling
-
- asr.l #7,d0
- move.w d0,4(a0)
-
- bsr ACTANIMOBJ
-
- rts
-
- StillHere:
- move.w 12(a0),d0
- bge.s .okinroom
- rts
- .okinroom
- move.b #1,numlives(a0)
-
- tst.b NASTY
- beq.s .nolocks
- move.l DoorsHeld(a0),d1
- or.l d1,DoorLocks
- .nolocks
-
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
- movem.l d0-d7/a0-a6,-(a7)
-
- move.w 12(a0),d2
- move.l ZoneAdds,a5
- move.l (a5,d2.w*4),d0
- add.l LEVELDATA,d0
- move.l d0,objroom
-
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
-
- jsr LOOKFORPLAYER1
- movem.l (a7)+,d0-d7/a0-a6
-
- Decoration
-
- move.w 12(a0),d0
- bge.s .okinroom
- rts
- .okinroom
-
- tst.b worry(a0)
- bne.s .worryaboot
- rts
- .worryaboot:
-
-
- intodeco:
- move.l a1,a2
-
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
-
- tst.w O_FloorCeiling(a2)
- beq.s .onfloor
- move.l ToZoneRoof(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbotc
- move.l ToUpperRoof(a1),d0
- .okinbotc:
-
- bra.s .onceiling
-
- .onfloor
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- .onceiling
-
- asr.l #7,d0
- move.w d0,4(a0)
-
- bsr DEFANIMOBJ
-
- rts
-
- PLR1CollectObject:
-
- cmp.b #'n',mors
- bne.s .nodeftext
-
- move.w TextToShow(a0),d0
- blt.s .notext
-
- muls #160,d0
- add.l LEVELDATA,d0
- jsr SENDMESSAGE
- ; move.w #0,SCROLLXPOS
- ; move.l d0,SCROLLPOINTER
- ; add.l #160,d0
- ; move.l d0,ENDSCROLL
- ; move.w #40,SCROLLTIMER
-
- bra .nodeftext
-
- .notext:
-
- cmp.b #'s',mors
- beq.s .nodeftext
-
- moveq #0,d2
- move.b TypeOfThing(a0),d2
- move.l LINKFILE,a4
- add.l #ObjectNames,a4
- muls #20,d2
- add.l d2,a4
- move.l #TEMPSCROLL,a2
- move.w #19,d2
-
- .copyname:
- move.b (a4)+,d3
- bne.s .oklet
- move.b #32,d3
- .oklet:
- move.b d3,(a2)+
-
- dbra d2,.copyname
-
- move.l #TEMPSCROLL,d0
- jsr SENDMESSAGENORET
-
- .nodeftext:
-
- move.l LINKFILE,a2
- lea AmmoGive(a2),a3
- add.l #GunGive,a2
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- move.w d0,d1
- muls #AmmoGiveLen,d0
- muls #GunGiveLen,d1
- add.w d1,a2
- add.w d0,a3
-
- ; Check if player has max of all ammo types:
-
- bsr CHECKPLAYERGOT
- tst.b d0
- beq dontcollect
-
- move.w #21,d0
- move.l #PLAYERONEHEALTH,a1
- GiveAmmo:
- move.w (a3)+,d1
- add.w d1,(a1)+
- dbra d0,GiveAmmo
-
- move.w #11,d0
- move.l #PLAYERONESHIELD,a1
- GiveGuns:
- move.w (a2)+,d1
- or.w d1,(a1)+
- dbra d0,GiveGuns
-
- move.l LINKFILE,a3
- add.l #ObjectStats,a3
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #ObjectStatLen,d0
- add.l d0,a3
-
- move.w O_SoundEffect(a3),d0
- blt.s .nosoundmake
-
- movem.l d0-d7/a0-a6,-(a7)
- move.w d0,Samplenum
- clr.b notifplaying
- move.w (a0),IDNUM
- move.w #80,Noisevol
- move.l #ObjRotated,a1
- move.w (a0),d0
- lea (a1,d0.w*8),a1
- move.l (a1),Noisex
- jsr MakeSomeNoise
- movem.l (a7)+,d0-d7/a0-a6
- .nosoundmake
-
-
- dontcollect:
- rts
-
- PLR2CollectObject:
-
- move.l LINKFILE,a2
- lea AmmoGive(a2),a3
- add.l #GunGive,a2
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- move.w d0,d1
- muls #AmmoGiveLen,d0
- muls #GunGiveLen,d1
- add.w d1,a2
- add.w d0,a3
-
- ; Check if player has max of all ammo types:
-
- bsr CHECKPLAYERGOT
- tst.b d0
- beq dontcollect2
-
- move.w #21,d0
- move.l #PLAYERTWOHEALTH,a1
- GiveAmmo2:
- move.w (a3)+,d1
- add.w d1,(a1)+
- dbra d0,GiveAmmo2
-
- move.w #11,d0
- move.l #PLAYERTWOSHIELD,a1
- GiveGuns2:
- move.w (a2)+,d1
- or.w d1,(a1)+
- dbra d0,GiveGuns2
-
- move.l LINKFILE,a3
- add.l #ObjectStats,a3
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #ObjectStatLen,d0
- add.l d0,a3
-
- move.w O_SoundEffect(a3),d0
- blt.s .nosoundmake
-
- movem.l d0-d7/a0-a6,-(a7)
- move.w d0,Samplenum
- clr.b notifplaying
- move.w (a0),IDNUM
- move.w #80,Noisevol
- move.l #ObjRotated,a1
- move.w (a0),d0
- lea (a1,d0.w*8),a1
- move.l (a1),Noisex
- move.b #0,Echo
- jsr MakeSomeNoise
- movem.l (a7)+,d0-d7/a0-a6
- .nosoundmake
-
- move.w #-1,12(a0)
- clr.b worry(a0)
-
- dontcollect2:
- rts
-
- PLAYERONEHEALTH:
- dc.w 0
- PLAYERONEFUEL:
- dc.w 0
- PLAYERONEAMMO:
- ds.w 20
-
- PLAYERONESHIELD:
- dc.w 0
- PLAYERONEJETPACK:
- dc.w 0
- PLAYERONEGUNS:
- dcb.w 10,0
-
- PLAYERTWOHEALTH:
- dc.w 0
- PLAYERTWOFUEL:
- dc.w 0
- PLAYERTWOAMMO:
- ds.w 20
-
- PLAYERTWOSHIELD:
- dc.w 0
- PLAYERTWOJETPACK:
- dc.w 0
- PLAYERTWOGUNS:
- dcb.w 10,0
-
- PLAYERTHREEHEALTH:
- dc.w 0
- PLAYERTHREEFUEL:
- dc.w 0
- PLAYERTHREEAMMO:
- ds.w 20
-
- PLAYERTHREESHIELD:
- dc.w 0
- PLAYERTHREEJETPACK:
- dc.w 0
- PLAYERTHREEGUNS:
- dcb.w 10,0
-
- CHECKPLAYERGOT:
- move.b #1,d0
- rts
-
- PLAYERTHREENOISEVOL: dc.l 0
-
- CHECKNEARBYONE:
-
- move.l StatPointer,a2
- move.b PLR1_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d0,d1
- bne .NotSameZone
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
-
- cmp.w 12(a0),d7
- bne .NotSameZone
-
- move.l PLR1_yoff,d7
- move.l PLR1_height,d6
- asr.l #1,d6
- add.l d6,d7
- asr.l #7,d7
- sub.w 4(a0),d7
- bgt.s .okpos
- neg.w d7
- .okpos
-
- cmp.w O_ColBoxHeight(a2),d7
- bgt .NotSameZone
-
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.w O_ColBoxRad(a2),d2
- muls d2,d2
- jsr CheckHit
- move.b hitwall,d0
- rts
- .NotSameZone
- moveq #0,d0
- rts
-
- CHECKNEARBYTWO:
-
- move.l StatPointer,a2
- move.b PLR2_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d0,d1
- bne .NotSameZone
-
- move.w PLR2_xoff,oldx
- move.w PLR2_zoff,oldz
- move.w PLR2_Zone,d7
-
- cmp.w 12(a0),d7
- bne .NotSameZone
-
- move.l PLR2_yoff,d7
- move.l PLR2_height,d6
- asr.l #1,d6
- add.l d6,d7
- asr.l #7,d7
- sub.w 4(a0),d7
- bgt.s .okpos
- neg.w d7
- .okpos
-
- cmp.w O_ColBoxHeight(a2),d7
- bgt .NotSameZone
-
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.w O_ColBoxRad(a2),d2
- muls d2,d2
- jsr CheckHit
- move.b hitwall,d0
- rts
- .NotSameZone
- moveq #0,d0
- rts
-
- StatPointer: dc.l 0
-
- DEFANIMOBJ:
-
- move.l LINKFILE,a3
- lea ObjectDefAnims(a3),a3
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #O_AnimSize,d0
- add.w d0,a3
- move.w ObjTimer(a0),d0
-
- move.w d0,d1
- add.w d0,d0
- asl.w #2,d1
- add.w d1,d0 ;*6
-
- cmp.w #1,O_GFXType(a2)
- blt.s .bitmap
- beq.s .vector
-
- .glare:
- move.l #0,8(a0)
- move.b (a3,d0.w),d1
- ext.w d1
- neg.w d1
- move.w d1,8(a0)
- move.b 1(a3,d0.w),11(a0)
- move.w 2(a3,d0.w),6(a0)
-
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
- rts
-
- .vector:
-
- move.l #0,8(a0)
- move.b (a3,d0.w),9(a0)
- move.b 1(a3,d0.w),11(a0)
-
- move.w #$ffff,6(a0)
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
- move.w 2(a3,d0.w),d1
- add.w d1,Facing(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
-
- rts
-
- .bitmap:
-
- move.l #0,8(a0)
- move.b (a3,d0.w),9(a0)
- move.b 1(a3,d0.w),11(a0)
- move.w 2(a3,d0.w),6(a0)
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
-
- rts
-
- ACTANIMOBJ:
-
- move.l LINKFILE,a3
- lea ObjectActAnims(a3),a3
- moveq #0,d0
- move.b TypeOfThing(a0),d0
- muls #O_AnimSize,d0
- add.w d0,a3
- move.w ObjTimer(a0),d0
-
- move.w d0,d1
- add.w d0,d0
- asl.w #2,d1
- add.w d1,d0 ;*6
-
- cmp.w #1,O_GFXType(a2)
- blt.s .bitmap
- beq.s .vector
-
- .glare:
- move.l #0,8(a0)
- move.b (a3,d0.w),d1
- ext.w d1
- neg.w d1
- move.w d1,8(a0)
- move.b 1(a3,d0.w),11(a0)
- move.w 2(a3,d0.w),6(a0)
-
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
-
- rts
-
- .vector:
- move.l #0,8(a0)
- move.b (a3,d0.w),9(a0)
- move.b 1(a3,d0.w),11(a0)
- move.w #$ffff,6(a0)
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
-
- move.w 2(a3,d0.w),d1
- add.w d1,Facing(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
-
- rts
-
- .bitmap:
-
- move.l #0,8(a0)
- move.b (a3,d0.w),9(a0)
- move.b 1(a3,d0.w),11(a0)
- move.w 2(a3,d0.w),6(a0)
- move.b 4(a3,d0.w),d1
- ext.w d1
- add.w d1,d1
- add.w d1,4(a0)
-
- moveq #0,d1
- move.b 5(a3,d0.w),d1
- move.w d1,ObjTimer(a0)
-
- rts
-
-
- THISPLRxoff: dc.w 0
- THISPLRzoff: dc.w 0
-
- ViewpointToDraw:
- ; Calculate which side to display:
-
- ; move.l ObjectPoints,a1
- ; move.w (a0),d1
- ; lea (a1,d1.w*8),a1 ; ptr to points
-
- ; move.w (a1),oldx
- ; move.w 4(a1),oldz
- ; move.w THISPLRxoff,newx
- ; move.w THISPLRzoff,newz
- ; move.w #64,speed
- ; move.w #-60,Range
- ; movem.l a0/a1,-(a7)
- ; jsr HeadTowards
- ; movem.l (a7)+,a0/a1
- ;
- ; move.w newx,d0
- ; sub.w oldx,d0
- ; move.w newz,d1
- ; sub.w oldz,d1
-
- move.w Facing(a0),d3
- sub.w angpos,d3
-
- ; add.w #2048,d3
- and.w #8190,d3
- move.l #SineTable,a2
- move.w (a2,d3.w),d2
- adda.w #2048,a2
- move.w (a2,d3.w),d3
-
- ; move.w d0,d4
- ; move.w d1,d5
- ; muls d3,d4
- ; muls d2,d5
- ; sub.l d5,d4
- ; muls d3,d1
- ; muls d2,d0
- ; add.l d1,d0
-
- ext.l d2
- ext.l d3
- move.l d3,d0
- move.l d2,d4
- neg.l d0
-
- tst.l d0
- bgt.s FacingTowardsPlayer
- FAP:
- tst.l d4
- bgt.s FAPR
- cmp.l d4,d0
- bgt.s LEFTFRAME
- bra.s AWAYFRAME
-
- FAPR:
- neg.l d0
- cmp.l d0,d4
- bgt.s RIGHTFRAME
- bra.s AWAYFRAME
-
- FacingTowardsPlayer
-
- tst.l d4
- bgt.s FTPR
- neg.l d4
- cmp.l d0,d4
- bgt.s LEFTFRAME
- bra.s TOWARDSFRAME
-
- FTPR:
- cmp.l d0,d4
- bgt.s RIGHTFRAME
- TOWARDSFRAME:
- move.l #0,d0
- rts
- RIGHTFRAME:
- move.l #1,d0
- rts
- LEFTFRAME:
- move.l #3,d0
- rts
- AWAYFRAME:
- move.l #2,d0
- rts
-
- deadframe: dc.l 0
- screamsound: dc.w 0
- nasheight: dc.w 0
- tempcos: dc.w 0
- tempsin: dc.w 0
- tempx: dc.w 0
- tempz: dc.w 0
-
- RunAround:
-
- movem.l d0/d1/d2/d3/a0/a1,-(a7)
-
- move.w oldx,d0
- sub.w newx,d0 ; dx
- asr.w #1,d0
- move.w oldz,d1
- sub.w newz,d1 ; dz
- asr.w #1,d1
-
- move.l ObjectPoints,a1
- move.w (a0),d2
- lea (a1,d2.w*8),a1
- move.w (a1),d2
- sub.w tempx,d2
- move.w 4(a1),d3
- sub.w tempz,d3
-
- muls tempcos,d2
- muls tempsin,d3
- sub.l d3,d2
-
- blt.s headleft
- neg.w d0
- neg.w d1
- headleft:
- sub.w d1,newx
- add.w d0,newz
-
- movem.l (a7)+,d0/d1/d2/d3/a0/a1
- rts
-
- bbbb: dc.w 0
- tsx: dc.w 0
- tsz: dc.w 0
- fsx: dc.w 0
- fsz: dc.w 0
-
- SHOOTPLAYER1
-
-
- move.w oldx,tsx
- move.w oldz,tsz
- move.w newx,fsx
- move.w newz,fsz
-
- move.w p1_xoff,newx
- move.w p1_zoff,newz
- move.w (a1),oldx
- move.w 4(a1),oldz
-
- move.w newx,d1
- sub.w oldx,d1
- move.w newz,d2
- sub.w oldz,d2
- jsr GetRand
- asr.w #4,d0
- muls d0,d1
- muls d0,d2
- swap d1
- swap d2
- add.w d1,newz
- sub.w d2,newx
-
- move.l p1_yoff,d1
- add.l #15*128,d1
- asr.l #7,d1
- move.w d1,d2
- muls d0,d2
- swap d2
- add.w d2,d1
- ext.l d1
- asl.l #7,d1
- move.l d1,newy
- move.w 4(a0),d1
- ext.l d1
- asl.l #7,d1
- move.l d1,oldy
-
- move.b ObjInTop(a0),StoodInTop
-
- st exitfirst
- move.w #0,extlen
- move.b #$ff,awayfromwall
- move.w #%0000010000000000,wallflags
- move.l #0,StepUpVal
- move.l #$1000000,StepDownVal
- move.l #0,thingheight
- move.l objroom,-(a7)
- movem.l d0-d7/a0-a6,-(a7)
-
- .again:
- jsr MoveObject
- tst.b hitwall
- bne.s .nofurther
- move.w newx,d0
- sub.w oldx,d0
- add.w d0,oldx
- add.w d0,newx
- move.w newz,d0
- sub.w oldz,d0
- add.w d0,oldz
- add.w d0,newz
- move.l newy,d0
- sub.l oldy,d0
- add.l d0,oldy
- add.l d0,newy
- bra .again
-
- .nofurther:
-
- move.l objroom,backroom
-
- movem.l (a7)+,d0-d7/a0-a6
- move.l (a7)+,objroom
-
- move.l PlayerShotData,a0
- move.w #19,d1
- .findonefree2
- move.w 12(a0),d2
- blt.s .foundonefree2
- adda.w #64,a0
- dbra d1,.findonefree2
-
- move.w tsx,oldx
- move.w tsz,oldz
- move.w fsx,newx
- move.w fsz,newz
-
- rts
-
- .foundonefree2:
-
- move.l ObjectPoints,a1
- move.w (a0),d2
- move.w newx,(a1,d2.w*8)
- move.w newz,4(a1,d2.w*8)
- move.b #1,shotstatus(a0)
- move.w #0,shotgrav(a0)
- move.b #0,shotsize(a0)
- move.b #0,shotanim(a0)
-
- move.l backroom,a1
- move.w (a1),12(a0)
- st worry(a0)
- move.l wallhitheight,d0
- move.l d0,accypos(a0)
- asr.l #7,d0
- move.w d0,4(a0)
-
- move.w tsx,oldx
- move.w tsz,oldz
- move.w fsx,newx
- move.w fsz,newz
-
-
- rts
-
- futurex: dc.w 0
- futurez: dc.w 0
-
- FireAtPlayer1:
-
- move.l ObjectPoints,a1
- move.w (a0),d1
- lea (a1,d1.w*8),a1
-
- move.l NastyShotData,a5
- move.w #19,d1
- .findonefree
- move.w 12(a5),d0
- blt.s .foundonefree
- adda.w #64,a5
- dbra d1,.findonefree
-
- bra .cantshoot
-
- .foundonefree:
-
- move.b #2,16(a5)
-
- move.l #ObjRotated,a6
- move.w (a0),d0
- lea (a6,d0.w*8),a6
-
- move.l (a6),Noisex
- move.w #100,Noisevol
- move.b #1,chanpick
- clr.b notifplaying
- move.b SHOTTYPE,d0
- move.w #0,shotlife(a5)
- move.b d0,shotsize(a5)
- move.b ALIENECHO,Echo
- move.b SHOTPOWER,shotpower(a5)
- movem.l a5/a1/a0,-(a7)
- move.w (a0),IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a5/a1/a0
-
- move.l ObjectPoints,a2
- move.w (a5),d1
- lea (a2,d1.w*8),a2
- move.w (a1),oldx
- move.w 4(a1),oldz
- move.w PLR1_xoff,newx
- move.w PLR1_zoff,newz
-
- jsr CalcDist
- move.w XDIFF1,d6
- muls distaway,d6
- divs SHOTSPEED,d6
- asr.w #4,d6
- add.w d6,newx
- move.w ZDIFF1,d6
- muls distaway,d6
- divs SHOTSPEED,d6
- asr.w #4,d6
- add.w d6,newz
- move.w newx,futurex
- move.w newz,futurez
-
- move.w SHOTSPEED,speed
- move.w #0,Range
- jsr HeadTowards
-
- move.w newx,d0
- sub.w oldx,d0
- move.w newz,d1
- sub.w oldz,d1
- move.w SHOTOFFMULT,d2
- beq.s .nooffset
-
- muls d2,d0
- muls d2,d1
- asr.l #8,d0
- asr.l #8,d1
- add.w d1,oldx
- sub.w d0,oldz
- move.w futurex,newx
- move.w futurez,newz
- jsr HeadTowards
-
- .nooffset:
-
- move.w newx,d0
- move.w d0,(a2)
- sub.w oldx,d0
- move.w d0,shotxvel(a5)
- move.w newz,d0
- move.w d0,4(a2)
- sub.w oldz,d0
- move.w d0,shotzvel(a5)
-
- move.l #%110010,EnemyFlags(a5)
- move.w 12(a0),12(a5)
- move.w 4(a0),d0
- move.w d0,4(a5)
- ext.l d0
- asl.l #7,d0
- add.l SHOTYOFF,d0
- move.l d0,accypos(a5)
- move.b SHOTINTOP,ObjInTop(a5)
- move.l PLR1_Obj,a2
- move.w 4(a2),d1
- sub.w #20,d1
- ext.l d1
- asl.l #7,d1
- sub.l d0,d1
- add.l d1,d1
- move.w distaway,d0
-
- move.w SHOTSHIFT,d2
- asr.w d2,d0
- tst.w d0
- bgt.s .okokokok
- moveq #1,d0
- .okokokok
-
- divs d0,d1
- move.w d1,shotyvel(a5)
- st worry(a5)
-
- move.l GunData,a6
- moveq #0,d0
- move.b SHOTTYPE,d0
- asl.w #5,d0
- add.w d0,a6
- move.w 16(a6),shotgrav(a5)
- move.w 18(a6),shotflags(a5)
- ; move.w 20(a6),d0
- ; add.w d0,shotyvel(a5)
-
- .cantshoot
- rts
-
-
- SHOOTPLAYER2
-
- move.w oldx,tsx
- move.w oldz,tsz
- move.w newx,fsx
- move.w oldx,fsz
-
- move.w p2_xoff,newx
- move.w p2_zoff,newz
- move.w (a1),oldx
- move.w 4(a1),oldz
-
- move.w newx,d1
- sub.w oldx,d1
- move.w newz,d2
- sub.w oldz,d2
- jsr GetRand
- asr.w #4,d0
- muls d0,d1
- muls d0,d2
- swap d1
- swap d2
- add.w d1,newz
- sub.w d2,newx
-
- move.l p2_yoff,d1
- add.l #15*128,d1
- asr.l #7,d1
- move.w d1,d2
- muls d0,d2
- swap d2
- add.w d2,d1
- ext.l d1
- asl.l #7,d1
- move.l d1,newy
- move.w 4(a0),d1
- ext.l d1
- asl.l #7,d1
- move.l d1,oldy
- move.b ObjInTop(a0),StoodInTop
-
- st exitfirst
- move.w #0,extlen
- move.b #$ff,awayfromwall
- move.w #%0000010000000000,wallflags
- move.l #0,StepUpVal
- move.l #$1000000,StepDownVal
- move.l #0,thingheight
- move.l objroom,-(a7)
- movem.l d0-d7/a0-a6,-(a7)
-
- .again:
- jsr MoveObject
- tst.b hitwall
- bne.s .nofurther
- move.w newx,d0
- sub.w oldx,d0
- add.w d0,oldx
- add.w d0,newx
- move.w newz,d0
- sub.w oldz,d0
- add.w d0,oldz
- add.w d0,newz
- move.l newy,d0
- sub.l oldy,d0
- add.l d0,oldy
- add.l d0,newy
- bra .again
-
- .nofurther:
-
- move.l objroom,backroom
-
- movem.l (a7)+,d0-d7/a0-a6
- move.l (a7)+,objroom
-
- move.l NastyShotData,a0
- move.w #19,d1
- .findonefree2
- move.w 12(a0),d2
- blt.s .foundonefree2
- adda.w #64,a0
- dbra d1,.findonefree2
-
- move.w tsx,oldx
- move.w tsz,oldz
- move.w fsx,newx
- move.w fsz,oldx
-
- rts
-
- .foundonefree2:
-
- move.l ObjectPoints,a1
- move.w (a0),d2
- move.w newx,(a1,d2.w*8)
- move.w newz,4(a1,d2.w*8)
- move.b #1,shotstatus(a0)
- move.w #0,shotgrav(a0)
- move.b #0,shotsize(a0)
- move.b #0,shotanim(a0)
-
- move.l backroom,a1
- move.w (a1),12(a0)
- st worry(a0)
- move.l wallhitheight,d0
- move.l d0,accypos(a0)
- asr.l #7,d0
- move.w d0,4(a0)
-
- move.w tsx,oldx
- move.w tsz,oldz
- move.w fsx,newx
- move.w fsz,oldx
-
- rts
-
- FireAtPlayer2:
- move.l NastyShotData,a5
- move.w #19,d1
- .findonefree
- move.w 12(a5),d0
- blt.s .foundonefree
- adda.w #64,a5
- dbra d1,.findonefree
-
- bra .cantshoot
-
- .foundonefree:
-
- move.b #2,16(a5)
-
- move.l #ObjRotated,a6
- move.w (a0),d0
- lea (a6,d0.w*8),a6
-
- move.l (a6),Noisex
- move.w #100,Noisevol
- move.b #1,chanpick
- clr.b notifplaying
- move.b SHOTPOWER,d0
- move.w #0,shotlife(a5)
- move.b d0,shotsize(a5)
- move.b SHOTPOWER,shotpower(a5)
- movem.l a5/a1/a0,-(a7)
- move.w (a0),IDNUM
- move.b ALIENECHO,Echo
- jsr MakeSomeNoise
- movem.l (a7)+,a5/a1/a0
-
- move.l ObjectPoints,a2
- move.w (a5),d1
- lea (a2,d1.w*8),a2
- move.w (a1),oldx
- move.w 4(a1),oldz
- move.w PLR2_xoff,newx
- move.w PLR2_zoff,newz
- move.w SHOTSPEED,speed
- move.w #0,Range
- jsr HeadTowards
-
- move.w newx,d0
- sub.w oldx,d0
- move.w newz,d1
- sub.w oldz,d1
- move.w SHOTOFFMULT,d2
- beq.s .nooffset
-
- muls d2,d0
- muls d2,d1
- asr.l #8,d0
- asr.l #8,d1
- add.w d1,oldx
- sub.w d0,oldz
- move.w PLR2_xoff,newx
- move.w PLR2_zoff,newz
- jsr HeadTowards
-
- .nooffset:
-
-
- move.w newx,d0
- move.w d0,(a2)
- sub.w oldx,d0
- move.w d0,shotxvel(a5)
- move.w newz,d0
- move.w d0,4(a2)
- sub.w oldz,d0
- move.w d0,shotzvel(a5)
-
- move.l #%110010,EnemyFlags(a5)
- move.w 12(a0),12(a5)
- move.w 4(a0),d0
- move.w d0,4(a5)
- ext.l d0
- asl.l #7,d0
- add.l SHOTYOFF,d0
- move.l d0,accypos(a5)
- move.b SHOTINTOP,ObjInTop(a5)
- move.l PLR2_Obj,a2
- move.w 4(a2),d1
- sub.w #20,d1
- ext.l d1
- asl.l #7,d1
- sub.l d0,d1
- add.l d1,d1
- move.w distaway,d0
- move.w SHOTSHIFT,d2
- asr.w d2,d0
- tst.w d0
- bgt.s .okokokok
- moveq #1,d0
- .okokokok
- divs d0,d1
- move.w d1,shotyvel(a5)
- st worry(a5)
- move.w #0,shotgrav(a5)
- .cantshoot
- rts
-
- SHOTYOFF: dc.l 0
- SHOTTYPE: dc.w 0
- SHOTPOWER: dc.w 0
- SHOTSPEED: dc.w 0
- SHOTOFFMULT: dc.w 0
- SHOTSHIFT: dc.w 0
- SHOTINTOP: dc.w 0
-
- backroom: dc.l 0